#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>


void sys_err (const char *str){
	perror(str);
	exit(1);
}



int main(int argc, char *argv[]){
	pid_t pid;

	int ret, fd;
	pid = fork();
	if (pid > 0)  // parent process stop
		exit(0);   
	pid = setsid();   // create new session
	if (pid == -1){
		sys_err("setsid error");
	}

	ret = chdir("/");  // change work dir
	if (ret == -1)
		sys_err("chdir error");
	

	umask(0022);    // change file access mask

	close(STDIN_FILENO);   // close fd 0
	fd = open("/dev/null", O_RDWR); // fd --> 0
	if (fd == -1)
		sys_err("open error");

	dup2(fd, STDOUT_FILENO);  // chong ding xiang stdout/stderr
	dup2(fd, STDERR_FILENO);

	while(1);  // daemon work
	return 0;
}
